 SBTL '16-SECTOR CORE ROUTINES'
***************************
*                         *
*         DISC-II         *
*     16-SECTOR FORMAT    *
*      READ AND WRITE     *
*       SUBROUTINES       *
*                         *
***************************
*                         *
*                         *
*     COPYRIGHT 1979      *
*   APPLE COMPUTER INC.   *
*                         *
*   ALL RIGHTS RESERVED   *
*                         *
***************************
*                         *
*      MAR 18, 1979       *
*          WOZ            *
*                         *
***************************
ASC1 EQU * ;TELL RELOCATOR WHERE CORE STARTS
 PAGE
***************************
*                         *
*     CRITICAL TIMING     *
*   REQUIRES PAGE BOUND   *
*   CONSIDERATIONS FOR    *
*      CODE AND DATA      *
*                         *
*     -----CODE-----      *
*                         *
*   VIRTUALLY THE ENTIRE  *
*    'WRITE16' ROUTINE    *
*      MUST NOT CROSS     *
*     PAGE BOUNDARIES.    *
*                         *
*  THE WRITE16, READ16    *
*  AND RDADR16 SUBRS      *
*  WHICH MUST NOT CROSS   *
*  PAGE BOUNDARIES ARE    *
*  NOTED IN COMMENTS.     *
*                         *
*     -----DATA-----      *
*                         *
*  NBUF1 AND NBUF2 ARE    *
*  256-BYTE AND 86-BYTE   *
*  NIBL BUFFERS IN RAM.   *
*  BOTH MUST BEGIN ON     *
*  PAGE BOUNDARIES.       *
*                         *
*  NIBLIZING TABLE 'NIBL' *
*  (64 BYTES) MAPS 6-BIT  *
*  NIBLS INTO VALID 7-BIT *
*  NIBLS.  THIS TABLE     *
*  MUST NOT CROSS A PAGE  *
*  BOUNDARY.              *
*                         *
*  DENIBLIZING TABLE      *
*  'DNIBL' MAPS 7-BIT     *
*  NIBLS INTO 6-BIT       *
*  NIBLS.  IT MUST BEGIN  *
*  ON A PAGE BOUNDARY,    *
*  BUT ONLY DNIBL,$96 TO  *
*  DNIBL,$FF ARE USED.    *
*                         *
***************************
 PAGE
***************************
*                         *
*         EQUATES         *
*                         *
***************************
*                         *
*    ----PRENIBL16----    *
*      AND POSTNB16       *
*   (16-SECTOR FORMAT)    *
*                         *
***************************
BUF EQU $3E TWO BYTE POINTER.
*
* POINTS TO 256-BYTE
* USER BUFFER ANYWHERE
* IN MEMORY.  PRENIBL16
* CONVERTS USER DATA
* (IN BUF) INTO 6-BIT
* NIBLS 00ABCDEF IN
* NBUF1 AND NBUF2 PRIOR
* TO 'WRITE'.  POSTNBL16
* CONVERTS 6-BIT NIBLS
* 00ABCDEF BACK TO USER
* DATA IN BUF AFTER 'READ'.
*
T0 EQU $26 TEMP FOR POSTNBL16.
************************
*                      *
*    ----RDADR16----   *
*                      *
************************
COUNT EQU $26 'MUST FIND' COUNT.
LAST EQU $26 'ODD BIT' NIBLS.
CSUM EQU $27 CHECKSUM BYTE.
CSSTV EQU $2C FOUR BYTES,
*       CHECKSUM, SECTOR, TRACK, AND VOLUME.
*
************************
*                      *
*    ---WRITE16---     *
*                      *
*  USES NBUF1, NBUF2,  *
*  AND 64-BYTE TABLE   *
*       'NIBL'.        *
*                      *
************************
WTEMP EQU $26 TEMP FOR DATA AT NBUF2,0.
SLOTZ EQU $27 SLOTNUM IN Z-PAG LOC.
SLOTABS EQU $678 SLOTNUM IN NON-ZPAG LOC.
*
************************
*                      *
*     ----READ16---    *
*  (16-SECTOR FORMAT)  *
*                      *
*   USES NBUF1,NBUF2.  *
*  USES LAST 106 BYTES *
*  OF A DATA PAGE FOR  *
*  SIGNIFICANT BYTES   *
*  OF DNIBL16 TABLE.   *
*                      *
************************
IDX EQU $26 INDEX INTO (BUF).
*
************************
*                      *
*    ---- SEEK ----    *
*                      *
************************
TRKCNT EQU $26 HALFTRKS MOVED COUNT.
PRIOR EQU $27 PRIOR HALFTRACK.
TRKN EQU $2A DESIRED TRACK.
SLOTTEMP EQU $2B SLOT NUM TIMES $10.
CURTRK EQU $478 CURRENT TRACK ON ENTRY.
*
************************
*                      *
*   ---- MSWAIT ----   *
*                      *
************************
MONTIMEL EQU $46 MOTOR-ON TIME
MONTIMEH EQU $47   COUNTERS.
*
************************
*                      *
*   ---- WRADR16 ----  *
*                      *
************************
AA EQU $3E ;TIMING CONSTANT
NSECT EQU $3F ;SECTOR NUMBER
NVOL EQU $41 ;VOLUME NUMBER
TRK EQU $44 ;TRACK NUMBER
*
************************
*                      *
*    DEVICE ADDRESS    *
*     ASSIGNMENTS      *
*                      *
************************
PHASEOFF EQU $C080 STEPPER PHASE OFF.
PHASEON EQU $C081 STEPPER PHASE ON.
Q6L EQU $C08C Q7L,Q6L=READ
Q6H EQU $C08D Q7L,Q6H=SENSE WPROT
Q7L EQU $C08E Q7H,Q6L=WRITE
Q7H EQU $C08F Q7H,Q6H=WRITE STORE
